package com.yonyou.cyxdms.sysAuth.service.mapper;


import com.yonyou.cyx.framework.dao.base.SuperMapper;
import com.yonyou.cyxdms.sysAuth.service.dto.OrgDTO;
import com.yonyou.cyxdms.sysAuth.service.dto.area.AreaDTO;
import com.yonyou.cyxdms.sysAuth.service.dto.area.AttachAreaDTO;
import com.yonyou.cyxdms.sysAuth.service.dto.area.OrgOutDto;
import com.yonyou.cyxdms.sysAuth.service.entity.OrgPO;
import com.yonyou.cyxdms.sysAuth.service.vo.org.*;
import com.yonyou.cyxdms.sysAuth.service.vo.user.UserVO;
import com.yonyou.cyxdms.sysmanage.client.vo.org.OrgAndParentVO;
import com.yonyou.cyxdms.sysmanage.client.vo.org.OrgParentVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 组织 Mapper 接口
 * </p>
 *
 * @author maxingjian
 * @since 2019-08-26
 */
public interface OrgMapper extends SuperMapper<OrgPO> {

    /**
     * @author ：maxingjian
     * @date ：2019/8/26 15:34
     * @description： 通过id获取所属公司
     */
    public String getOwerCodebyOrgId(@Param("orgId") Long orgId);

    /**
     * @author ：maxingjian
     * @date ：2019/8/26 15:34
     * @description： 通过id获取所属公司
     */
    public Long getOwnerIdByOrgId(@Param("orgId") Long orgId);

    /**
     * @author ：maxingjian
     * @date ：2019/8/26 15:34
     * @description： 通过id获取下级的组织
     */
    public List<OrgVO> getChildOrg(@Param("companyId") Long companyId, @Param("orgId") String orgId, @Param("type") String type);

    public List<OrgVO> getChildOrgs();

    public List<OrgVO> getChildOrgsc(@Param("orgId") String orgId);

    /**
     * @author ：maxingjian
     * @date ：2019/8/26 15:34
     * @description： 通过id获取明细
     */
    public OrgDetailVO getOrgDetail(@Param("orgId") String orgId);


    /**
     * @author ：maxingjian
     * @date ：2019/8/26 15:34
     * @description： 通过id授权品牌车系
     */
    public List<OrgBrandSeriesVO> getOrgBrandSeries(@Param("orgId") String orgId);

    public List<OrgBrandSeriesVO> getOrgBrandType(@Param("orgId") String orgId);


    /**
     * @author ：maxingjian
     * @date ：2019/8/26 15:34
     * @description： 通过id获取上级组织授权品牌
     */
    public List<OrgBrandVO> getOrgBrand(@Param("orgId") String orgId, @Param("billType") String billType);

    /**
     * @author ：李贺
     * @date ：2019/9/6
     * @description： 通过orgId获取上级组织orgId
     */
    List<Long> getParentOrgId(@Param("orgId") Long orgId);

    List<OrgParentVO> getOrgByOrgIds(@Param("orgIds") String[] orgIds);

    OrgAndParentVO getOrgByOrgId(@Param("orgId") Long orgId);

    List<OrgByTypeVO> getOrgByOrgType(@Param("orgTypes") String[] orgTypes, @Param("companyId") String companyId, @Param("appId") String appId);

    List<OrgByTypeVO> getOrgByOrgType4cms(@Param("orgType") String orgType, @Param("companyId") String companyId, @Param("appId") String appId,
                                          @Param("parentOrgId") String parentOrgId,@Param("orgCode") String orgCode,@Param("orgName")  String orgName);

    GmsOrgVO findOrgInfo(@Param("orgId") Long orgId);

    String getOrgs(@Param("orgId") Long orgId);

    void deleteById(@Param("orgId") Long id,@Param("companyId") Long companyId);

    Map<String, String> getOrgNameByOwnerCode(@Param("appId") String appId,
                                              @Param("dealercode") String dealercode);

    List<OrgParentVO> getOrgByOrgsAndOrgTypes(@Param("orgIdList") String[] orgIdList, @Param("orgTypeList") List<Integer> orgTypeList);

    List<OrgParentVO> getBusinessOrg(@Param("appId") String appId);

    List<UserVO> getUserByOrgId(@Param("orgId") Long orgId);

   List<Long>  findOrgIdByCode(@Param("orgCode") String orgCode, @Param("companyId") Integer companyId);

    List<OrgVO> getOrgByTypeAndParent(@Param("parentOrgId") Long parentOrgId, @Param("orgType") Long orgType);

    /**
     * 获得销售小组
     *
     * @return
     * @author 李贺
     * @since 2020/1/7
     */
    List<OrgByTypeVO> listSalesTeam(@Param("companyId") Long companyId);

    List<OrgParentVO> getBusinessOrgAll(@Param("appId") String appId);


    List<AreaDTO> select(List<String> orgType);


    List<AttachAreaDTO> selectorgName(@Param("orgId")Long orgId);

    List<OrgOutDto> getOrgAllOut();
}
